home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-04-08 | 49.5 KB | 1,272 lines | [TEXT/MPS ] |
- ////////////////////////////////////////////////////////////////////////////////
- // OPEN SCRIPTING ARCHITECTURE: Client Interface
- ////////////////////////////////////////////////////////////////////////////////
- // Copyright © 1992 Apple Computer, Inc. All rights reserved.
- // Authors: Jens Alfke, William Cook, Donn Denman, and Warren Harris
- ////////////////////////////////////////////////////////////////////////////////
- // This interface defines what it means to be a "scripting component."
- // Scripting components allow "scripts" to be loaded and executed. This
- // interface does not define the way in which a particular scripting
- // component's scripts are editing and debugged.
- ////////////////////////////////////////////////////////////////////////////////
-
- #ifndef __OSA__
- #define __OSA__
-
- #ifndef __APPLEEVENTS__
- #include <AppleEvents.h>
- #endif
- #ifndef __AEOBJECTS__
- #include <AEObjects.h>
- #endif
- #ifndef __COMPONENTS__
- #include <Components.h>
- #endif
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- //////// Conditional Compilation
-
- // component implements can define this macro eliminate the inlines
- #ifndef OSAComponentFunctionInline
- #define OSAComponentFunctionInline(a, b) = ComponentCallNow(a, b)
- #endif
-
- ////////////////////////////////////////////////////////////////////////////////
- // Types and Constants
- ////////////////////////////////////////////////////////////////////////////////
-
- #define kOSAComponentType 'osa '
- // The componenent manager type code for components that
- // support the OSA interface defined here.
-
- #define kOSAGenericScriptingComponentSubtype 'scpt'
-
- #define kOSAFileType 'osas'
- // Type of script document files.
-
- typedef ComponentResult OSAError;
- // Under the Open Scripting Architecture all error results are longs.
-
- typedef unsigned long OSAID;
- // OSAIDs allow transparent manipulation of scripts associated with
- // various scripting systems.
-
- #define kOSANullScript ((OSAID) 0)
- // No-script constant.
-
- #define kOSANullMode 0 // sounds better
- #define kOSAModeNull 0 // tastes consistent
- // Some routines take flags that control their execution. This constant
- // declares default mode settings are used.
-
- #define kOSASuite 'ascr'
- #define kOSARecordedText 'recd'
- // Suite and event code of the RecordedText event. (See OSAStartRecording,
- // below.)
-
- ////////////////////////////////////////////////////////////////////////////////
- // API Errors
- ////////////////////////////////////////////////////////////////////////////////
-
- #define errOSASystemError -1750
- #define errOSAInvalidID -1751
- #define errOSABadStorageType -1752
- #define errOSAScriptError -1753
- #define errOSABadSelector -1754
- #define errOSASourceNotAvailable -1756
- #define errOSANoSuchDialect -1757
- #define errOSADataFormatObsolete -1758
- #define errOSADataFormatTooNew -1759
- #define errOSACorruptData errAECorruptData
- #define errOSARecordingIsAlreadyOn errAERecordingIsAlreadyOn
-
- ////////////////////////////////////////////////////////////////////////////////
- // Standard Script Errors
- ////////////////////////////////////////////////////////////////////////////////
- // It is recommended that scripting components use the following set of error
- // codes to signal failure when applicable. This enables applications that
- // use the OSA API to deal with some class of script errors in a less than
- // ad hoc manner. Scripting components are of course encouraged to return
- // component-specific errors when these don't apply.
- ////////////////////////////////////////////////////////////////////////////////
-
- //////// Dynamic errors:
- //
- // These errors result from data-dependent conditions and are typically
- // signaled at runtime.
-
- #define errOSACantCoerce errAECoercionFail
- // Signaled when a value can't be coerced to the desired type. Similar
- // to errOSATypeError except results from coercion.
-
- #define errOSACantAccess errAENoSuchObject
- // Signaled when an object is not found in a container.
-
- #define errOSACantAssign -10006
- // Signaled when an object cannot be set in a container. Same as
- // AERegistry error errAEWriteDenied.
-
- #define errOSAGeneralError -2700
- // Signaled by user scripts or applications when no actual error code
- // is to be returned. Simply means "an error has occurred". Most useful
- // in conjunction with an error message from the application.
-
- #define errOSADivideByZero -2701
- // Signaled when there is an attempt to divide by zero.
-
- #define errOSANumericOverflow -2702
- // Signaled when integer or real value is too large to be represented.
-
- #define errOSACantLaunch -2703
- // Signaled when application can't be launched or when it is remote and
- // program linking is not enabled.
-
- #define errOSAAppNotHighLevelEventAware -2704
- // Signaled when an application can't respond to AppleEvents.
-
- #define errOSACorruptTerminology -2705
- // Signaled when an application's terminology resource is not readable.
-
- #define errOSAStackOverflow -2706
- // Signaled when the runtime stack overflows.
-
- #define errOSAInternalTableOverflow -2707
- // Signaled when a runtime internal data structure overflows.
-
- #define errOSADataBlockTooLarge -2708
- // Signaled when an intrinsic limitation is exceeded for the size of
- // a value or data structure.
-
- #define errOSACantGetTerminology -2709
- // Signaled when we couldn't terminology even though it was there.
-
- //////// Component-specific dynamic script errors:
- //
- // The range -2720 thru -2739 is reserved for component-specific runtime errors.
- // (Note that error codes from different scripting components in this range will
- // overlap.)
-
- //////// Static errors:
- //
- // These errors comprise what are commonly thought of as parse and compile-
- // time errors. However, in a dynamic system (e.g. AppleScript) any or all
- // of these may also occur at runtime.
-
- #define errOSATypeError errAEWrongDataType
- // Signaled when data was not the right type and coercion is not allowed.
-
- #define errOSAMessageNotUnderstood errAEEventNotHandled
- // Signaled when a message was sent to an object that didn't handle it.
-
- #define errOSAUndefinedHandler errAEHandlerNotFound
- // Signaled when a function to be returned doesn't exist. (Probably only
- // useful in languages with first-class functions that distinguish between
- // functions and other values (two name spaces). This is different from
- // errOSAMessageNotUnderstood, which may be signaled when the method is
- // invoked.
-
- #define errOSAIllegalAccess errAEAccessorNotFound
- // Signaled when a container can never have the requested object.
-
- #define errOSAIllegalIndex errAEIllegalIndex
- // Signaled when index was out of range. Specialization of errOSACantAccess.
-
- #define errOSAIllegalRange errAEImpossibleRange
- // Signaled when a range is screwy. Specialization of errOSACantAccess.
-
- #define errOSAIllegalAssign -10003
- // Signaled when an object can never be set in a container. Same as
- // AERegistry error errAENotModifiable.
-
- #define errOSASyntaxError -2740
- // Signaled when a syntax error occurs. (e.g. "Syntax error" or
- // "<this> can't go after <that>").
-
- #define errOSASyntaxTypeError -2741
- // Signaled when another form of syntax was expected. (e.g. "expected
- // a <type> but found <this>").
-
- #define errOSATokenTooLong -2742
- // Signaled when a name or number is too long to be parsed.
-
- #define errOSAMissingParameter errAEDescNotFound
- // Signaled when a parameter is missing for a function invocation. Note
- // that in some languages, this error may occur at runtime.
-
- #define errOSAParameterMismatch errAEWrongNumberArgs
- // Signaled when function is called with the wrong number of parameters,
- // or a parameter pattern cannot be matched.
-
- #define errOSADuplicateParameter -2750
- // Signaled when a formal parameter, local variable, or instance variable
- // is specified more than once.
-
- #define errOSADuplicateProperty -2751
- // Signaled when a formal parameter, local variable, or instance variable
- // is specified more than once.
-
- #define errOSADuplicateHandler -2752
- // Signaled when more than one handler is defined with the same name in
- // a scope where the language doesn't allow it.
-
- #define errOSAUndefinedVariable -2753
- // Signaled when a variable is accessed that has no value.
-
- #define errOSAInconsistentDeclarations -2754
- // Signaled when a variable is declared inconsistently in the same scope,
- // such as both local and global.
-
- #define errOSAControlFlowError -2755
- // Signaled when illegal control flow occurs in an application (no catcher
- // for throw, non-lexical loop exit, etc.).
-
- //////// Component-specific static script errors:
- //
- // The range -2760 thru -2779 is reserved for component-specific parsing and
- // compile-time errors. (Note that error codes from different scripting
- // components in this range will overlap.)
-
- //////// Dialect-specific script errors:
- //
- // The range -2780 thru -2799 is reserved for dialect specific error codes for
- // scripting components that support dialects. (Note that error codes from
- // different scripting components in this range will overlap, as well as error
- // codes from different dialects in the same scripting component.)
-
- ////////////////////////////////////////////////////////////////////////////////
- // OSA Interface Descriptions
- ////////////////////////////////////////////////////////////////////////////////
- // The OSA Interface is broken down into a required interface, and several
- // optional interfaces to support additional functionality. A given scripting
- // component may choose to support only some of the optional interfaces in
- // addition to the basic interface. The OSA Component Flags may be used to
- // query the Component Manager to find a scripting component with a particular
- // capability, or determine if a particular scripting component supports a
- // particular capability.
- ////////////////////////////////////////////////////////////////////////////////
-
- //////// OSA Component Flags:
-
- #define kOSASupportsCompiling 0x0002
- #define kOSASupportsGetSource 0x0004
- #define kOSASupportsAECoercion 0x0008
- #define kOSASupportsAESending 0x0010
- #define kOSASupportsRecording 0x0020
- #define kOSASupportsConvenience 0x0040
- #define kOSASupportsDialects 0x0080
- #define kOSASupportsEventHandling 0x0100
-
- //////// Component Selectors:
-
- // Basic Scripting:
- #define kOSASelectLoad 0x0001
- #define kOSASelectStore 0x0002
- #define kOSASelectExecute 0x0003
- #define kOSASelectDisplay 0x0004
- #define kOSASelectScriptError 0x0005
- #define kOSASelectDispose 0x0006
- #define kOSASelectSetScriptInfo 0x0007
- #define kOSASelectGetScriptInfo 0x0008
- #define kOSASelectSetActiveProc 0x0009
- #define kOSASelectGetActiveProc 0x000A
- // Compiling:
- #define kOSASelectScriptingComponentName 0x0102
- #define kOSASelectCompile 0x0103
- #define kOSASelectCopyID 0x0104
- // GetSource:
- #define kOSASelectGetSource 0x0201
- // AECoercion:
- #define kOSASelectCoerceFromDesc 0x0301
- #define kOSASelectCoerceToDesc 0x0302
- // AESending:
- #define kOSASelectSetSendProc 0x0401
- #define kOSASelectGetSendProc 0x0402
- #define kOSASelectSetCreateProc 0x0403
- #define kOSASelectGetCreateProc 0x0404
- #define kOSASelectSetDefaultTarget 0x0405
- // Recording:
- #define kOSASelectStartRecording 0x0501
- #define kOSASelectStopRecording 0x0502
- // Convenience:
- #define kOSASelectLoadExecute 0x0601
- #define kOSASelectCompileExecute 0x0602
- #define kOSASelectDoScript 0x0603
- // Dialects:
- #define kOSASelectSetCurrentDialect 0x0701
- #define kOSASelectGetCurrentDialect 0x0702
- #define kOSASelectAvailableDialects 0x0703
- #define kOSASelectGetDialectInfo 0x0704
- #define kOSASelectAvailableDialectCodeList 0x0705
- // Event Handling:
- #define kOSASelectSetResumeDispatchProc 0x0801
- #define kOSASelectGetResumeDispatchProc 0x0802
- #define kOSASelectExecuteEvent 0x0803
- #define kOSASelectDoEvent 0x0804
- #define kOSASelectMakeContext 0x0805
-
- #define kOSASelectComponentSpecificStart 0x1001
- // scripting component specific selectors are added beginning with this
- // value
-
- //////// Mode Flags:
- //
- // Warning: These should not conflict with the AESend mode flags in
- // AppleEvents.h, because we may want to use them as OSA mode flags too.
-
- #define kOSAModePreventGetSource 0x00000001
- // This mode flag may be passed to OSALoad, OSAStore or OSACompile to
- // instruct the scripting component to not retain the "source" of an
- // expression. This will cause the OSAGetSource call to return the error
- // errOSASourceNotAvailable if used. However, some scripting components
- // may not retain the source anyway. This is mainly used when either space
- // efficiency is desired, or a script is to be "locked" so that its
- // implementation may not be viewed.
-
- #define kOSAModeNeverInteract kAENeverInteract
- #define kOSAModeCanInteract kAECanInteract
- #define kOSAModeAlwaysInteract kAEAlwaysInteract
- #define kOSAModeDontReconnect kAEDontReconnect
- // These mode flags may be passed to OSACompile, OSAExecute, OSALoadExecute
- // OSACompileExecute, OSADoScript, OSAExecuteEvent, or OSADoEvent to
- // indicate whether or not the script may interact with the user, switch
- // layer or reconnect if necessary. Any AppleEvents will be sent with the
- // corresponding AESend mode supplied.
-
- #define kOSAModeCantSwitchLayer 0x00000040
- // This mode flag may be passed to OSACompile, OSAExecute, OSALoadExecute
- // OSACompileExecute, OSADoScript, OSAExecuteEvent, or OSADoEvent to
- // indicate whether or not AppleEvents should be sent with the
- // kAECanSwitchLayer mode flag sent or not. NOTE: This flag is exactly the
- // opposite sense of the AppleEvent flag kAECanSwitchLayer. This is to
- // provide a more convenient default, i.e. not supplying any mode
- // (kOSAModeNull) means to send events with kAECanSwitchLayer. Supplying
- // the kOSAModeCantSwitchLayer mode flag will cause AESend to be called
- // without kAECanSwitchLayer.
-
- #define kOSAModeDoRecord 0x00001000
- // This mode flag may be passed to OSACompile, OSAExecute, OSALoadExecute
- // OSACompileExecute, OSADoScript, OSAExecuteEvent, or OSADoEvent to
- // indicate whether or not AppleEvents should be sent with the kAEDontRecord
- // mode flag sent or not. NOTE: This flag is exactly the opposite sense of
- // the AppleEvent flag kAEDontRecord. This is to provide a more convenient
- // default, i.e. not supplying any mode (kOSAModeNull) means to send events
- // with kAEDontRecord. Supplying the kOSAModeDoRecord mode flag will
- // cause AESend to be called without kAEDontRecord.
-
- #define kOSAModeCompileIntoContext 0x00000002
- // This is a mode flag for OSACompile that indicates that a context should
- // be created as the result of compilation. All handler definitions are
- // inserted into the new context, and variables are initialized by
- // evaluating their initial values in a null context (i.e. they must be
- // constant expressions).
-
- #define kOSAModeAugmentContext 0x00000004
- // This is a mode flag for OSACompile that indicates that the previous
- // script ID (input to OSACompile) should be augmented with any new
- // definitions in the sourceData rather than replaced with a new script.
- // This means that the previous script ID must designate a context.
- // The presence of this flag causes the kOSAModeCompileIntoContext flag
- // to be implicitly used, causing any new definitions to be initialized
- // in a null context.
-
- #define kOSAModeDisplayForHumans 0x00000008
- // This mode flag may be passed to OSADisplay or OSADoScript to indicate
- // that output only need be human-readable, not re-compilable by OSACompile.
- // If used, output may be arbitrarily "beautified", e.g. quotes may be left
- // off of string values, long lists may have elipses, etc.
-
- #define kOSAModeDontStoreParent 0x00004000
- // This mode flag may be passed to OSAStore in the case where the scriptID
- // is a context. This causes the context to be saved, but not the context's
- // parent context. When the stored context is loaded back in, the parent
- // will be kOSANullScript.
-
- ////////////////////////////////////////////////////////////////////////////////
- // OSA Basic Scripting Interface
- ////////////////////////////////////////////////////////////////////////////////
- // Scripting components must at least support the Basic Scripting interface.
- ////////////////////////////////////////////////////////////////////////////////
-
- //////// Loading and Storing Scripts:
- //
- // These routines allow scripts to be loaded and stored in their internal
- // (possibly compiled, non-text) representation.
-
- #define kOSAScriptResourceType kOSAGenericScriptingComponentSubtype
- // Resource type for scripts.
-
- #define typeOSAGenericStorage kOSAScriptResourceType
- // Default type given to OSAStore which creates "generic" loadable script
- // data descriptors.
-
- pascal OSAError
- OSALoad(ComponentInstance scriptingComponent,
- const AEDesc* scriptData,
- long modeFlags,
- OSAID* resultingScriptID)
- OSAComponentFunctionInline(kOSASelectLoad, 12);
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSABadStorageType: scriptData not for this scripting component
- // errOSACorruptData: data seems to be corrupt
- // errOSADataFormatObsolete script data format is no longer supported
- // errOSADataFormatTooNew script data format is from a newer version
- //
- // ModeFlags:
- // kOSAModePreventGetSource
-
- pascal OSAError
- OSAStore(ComponentInstance scriptingComponent,
- OSAID scriptID,
- DescType desiredType,
- long modeFlags,
- AEDesc* resultingScriptData)
- OSAComponentFunctionInline(kOSASelectStore, 16);
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
- // errOSABadStorageType: desiredType not for this scripting component
- //
- // ModeFlags:
- // kOSAModePreventGetSource
- // kOSAModeDontStoreParent
-
- //////// Executing Scripts:
-
- pascal OSAError
- OSAExecute(ComponentInstance scriptingComponent,
- OSAID compiledScriptID,
- OSAID contextID,
- long modeFlags,
- OSAID* resultingScriptValueID)
- OSAComponentFunctionInline(kOSASelectExecute, 16);
- // This call runs a script. The contextID represents the environment
- // with which global variables in the script are resolved. The constant
- // kOSANullScript may be used for the contextID if the application wishes
- // to not deal with context directly (a default one is associated with each
- // scripting component instance). The resultingScriptValueID is the
- // result of evaluation, and contains a value which may be displayed using
- // the OSAGetSource call. The modeFlags convey scripting component
- // specific information.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
- // errOSAScriptError: the executing script got an error
- //
- // ModeFlags:
- // kOSAModeNeverInteract
- // kOSAModeCanInteract
- // kOSAModeAlwaysInteract
- // kOSAModeCantSwitchLayer
- // kOSAModeDontReconnect
- // kOSAModeDoRecord
-
- //////// Displaying results:
-
- pascal OSAError
- OSADisplay(ComponentInstance scriptingComponent,
- OSAID scriptValueID,
- DescType desiredType,
- long modeFlags,
- AEDesc* resultingText)
- OSAComponentFunctionInline(kOSASelectDisplay, 16);
- // This call is used to convert results (script value IDs) into displayable
- // text. The desiredType should be at least typeChar, and modeFlags are
- // scripting system specific flags to control the formatting of the
- // resulting text. This call differs from OSAGetSource in that (1) it
- // always produces at least typeChar, (2) is only works on script values,
- // (3) it may display it's output in non-compilable form (e.g. without
- // string quotes, elipses inserted in long and/or circular lists, etc.) and
- // (4) it is required by the basic scripting interface.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
- // errAECoercionFail: desiredType not supported by scripting component
- //
- // ModeFlags:
- // kOSAModeDisplayForHumans
-
- //////// Getting Error Information:
-
- pascal OSAError
- OSAScriptError(ComponentInstance scriptingComponent,
- OSType selector,
- DescType desiredType,
- AEDesc* resultingErrorDescription)
- OSAComponentFunctionInline(kOSASelectScriptError, 12);
- // Whenever script execution returns errOSAExecutionError, this routine
- // may be used to get information about that error. The selector describes
- // the type of information desired about the error (various selectors are
- // listed below). The desiredType indicates the data type of the result
- // desired for that selector.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSABadSelector: selector not supported by scripting component
- // errAECoercionFail: desiredType not supported by scripting component
-
- // OSAScriptError selectors:
-
- #define kOSAErrorNumber keyErrorNumber
- // This selector is used to determine the error number of a script error.
- // These error numbers may be either system error numbers, or error numbers
- // that are scripting component specific.
- // Required desiredTypes:
- // typeShortInteger
-
- #define kOSAErrorMessage keyErrorString
- // This selector is used to determine the full error message associated
- // with the error number. It should include the name of the application
- // which caused the error, as well as the specific error that occurred.
- // This selector is sufficient for simple error reporting (but see
- // kOSAErrorBriefMessage, below).
- // Required desiredTypes:
- // typeChar error message string
-
- #define kOSAErrorBriefMessage 'errb'
- // This selector is used to determine a brief error message associated with
- // the error number. This message and should not mention the name of the
- // application which caused the error, any partial results or offending
- // object (see kOSAErrorApp, kOSAErrorPartialResult and
- // kOSAErrorOffendingObject, below).
- // Required desiredTypes:
- // typeChar brief error message string
-
- #define kOSAErrorApp 'erap'
- // This selector is used to determine which application actually got the
- // error (if it was the result of an AESend), or the current application
- // if ....
- // Required desiredTypes:
- // typeProcessSerialNumber PSN of the errant application
- // typeChar name of the errant application
-
- #define kOSAErrorPartialResult 'ptlr'
- // This selector is used to determine any partial result returned by an
- // operation. If an AESend call failed, but a partial result was returned,
- // then the partial result may be returned as an AEDesc.
- // Required desiredTypes:
- // typeBest AEDesc of any partial result
-
- #define kOSAErrorOffendingObject 'erob'
- // This selector is used to determine any object which caused the error
- // that may have been indicated by an application. The result is an
- // AEDesc.
- // Required desiredTypes:
- // typeBest AEDesc of any offending object
-
- #define kOSAErrorExpectedType 'errt'
- // This selector is used to determine the type expected by a coercion
- // operation if a type error occurred.
-
- #define kOSAErrorRange 'erng'
- // This selector is used to determine the source text range (start and
- // end positions) of where the error occurred.
- // Required desiredTypes:
- // typeOSAErrorRange
-
- #define typeOSAErrorRange 'erng'
- // An AERecord type containing keyOSASourceStart and keyOSASourceEnd fields
- // of type short.
- #define keyOSASourceStart 'srcs'
- // Field of a typeOSAErrorRange record of typeShortInteger.
- #define keyOSASourceEnd 'srce'
- // Field of a typeOSAErrorRange record of typeShortInteger.
-
- //////// Disposing Script IDs:
-
- pascal OSAError
- OSADispose(ComponentInstance scriptingComponent,
- OSAID scriptID)
- OSAComponentFunctionInline(kOSASelectDispose, 4);
- // Disposes a script or context.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
-
- //////// Getting and Setting Script Information:
-
- pascal OSAError
- OSASetScriptInfo(ComponentInstance scriptingComponent,
- OSAID scriptID,
- OSType selector,
- long value)
- OSAComponentFunctionInline(kOSASelectSetScriptInfo, 12);
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
- // errOSABadSelector: selector not supported by scripting component
- // or selector not for this scriptID
-
- pascal OSAError
- OSAGetScriptInfo(ComponentInstance scriptingComponent,
- OSAID scriptID,
- OSType selector,
- long* result)
- OSAComponentFunctionInline(kOSASelectGetScriptInfo, 12);
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
- // errOSABadSelector: selector not supported by scripting component
- // or selector not for this scriptID
-
- #define kOSAScriptIsModified 'modi'
- // Selector returns boolean.
-
- #define kOSAScriptIsTypeCompiledScript 'cscr'
- // Selector returns boolean.
-
- #define kOSAScriptIsTypeScriptValue 'valu'
- // Selector returns boolean.
-
- #define kOSAScriptIsTypeScriptContext 'cntx'
- // Selector returns boolean.
-
- #define kOSAScriptBestType 'best'
- // Selector returns a DescType which may be passed to OSACoerceToDesc.
-
- #define kOSACanGetSource 'gsrc'
- // This selector is used to determine whether a script has source
- // associated with it that when given to OSAGetSource, the call will not
- // fail. The selector returns a boolean.
-
- //////// Manipulating the ActiveProc:
- //
- // Scripting systems will supply default values for these procedures if they
- // are not set by the client:
-
- typedef pascal OSErr (*OSAActiveProcPtr)(long refCon);
-
- pascal OSAError
- OSASetActiveProc(ComponentInstance scriptingComponent,
- OSAActiveProcPtr activeProc,
- long refCon)
- OSAComponentFunctionInline(kOSASelectSetActiveProc, 8);
- // If activeProc is nil, the default activeProc is used.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
-
- pascal OSAError
- OSAGetActiveProc(ComponentInstance scriptingComponent,
- OSAActiveProcPtr* activeProc,
- long* refCon)
- OSAComponentFunctionInline(kOSASelectGetActiveProc, 8);
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
-
- ////////////////////////////////////////////////////////////////////////////////
- // OSA Optional Compiling Interface
- ////////////////////////////////////////////////////////////////////////////////
- // Scripting components that support the Compiling interface have the
- // kOSASupportsCompiling bit set in it's ComponentDescription.
- ////////////////////////////////////////////////////////////////////////////////
-
- pascal OSAError
- OSAScriptingComponentName(ComponentInstance scriptingComponent,
- AEDesc* resultingScriptingComponentName)
- OSAComponentFunctionInline(kOSASelectScriptingComponentName, 4);
- // Given a scripting component, this routine returns the name of that
- // scripting component in a type that is coercable to text (typeChar).
- // The generic scripting component returns the name of the default
- // scripting component. This name should be sufficient to convey to the
- // user the kind of script (syntax) he is expected to write.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
-
- pascal OSAError
- OSACompile(ComponentInstance scriptingComponent,
- const AEDesc* sourceData,
- long modeFlags,
- OSAID* previousAndResultingScriptID)
- OSAComponentFunctionInline(kOSASelectCompile, 12);
- // Coerces input desc (possibly text) into a script's internal format.
- // Once compiled, the script is ready to run. The modeFlags convey
- // scripting component specific information. The previous script ID
- // (result parameter) is made to refer to the newly compiled script,
- // unless it was originally kOSANullScript. In this case a new script
- // ID is created and used.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errAECoercionFail: sourceData is not compilable
- // errOSAScriptError: sourceData was a bad script (syntax error)
- // errOSAInvalidID: previousAndResultingCompiledScriptID was not
- // valid on input
- //
- // ModeFlags:
- // kOSAModePreventGetSource
- // kOSAModeCompileIntoContext
- // kOSAModeAugmentContext
- // kOSAModeNeverInteract
- // kOSAModeCanInteract
- // kOSAModeAlwaysInteract
- // kOSAModeCantSwitchLayer
- // kOSAModeDontReconnect
- // kOSAModeDoRecord
-
- pascal OSAError
- OSACopyID(ComponentInstance scriptingComponent,
- OSAID fromID,
- OSAID* toID)
- OSAComponentFunctionInline(kOSASelectCopyID, 8);
- // If toID is a reference to kOSANullScript then it is updated to have a
- // new scriptID value. This call can be used to perform undo or revert
- // operations on scripts.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
-
- ////////////////////////////////////////////////////////////////////////////////
- // OSA Optional GetSource Interface
- ////////////////////////////////////////////////////////////////////////////////
- // Scripting components that support the GetSource interface have the
- // kOSASupportsGetSource bit set in it's ComponentDescription.
- ////////////////////////////////////////////////////////////////////////////////
-
- pascal OSAError
- OSAGetSource(ComponentInstance scriptingComponent,
- OSAID scriptID,
- DescType desiredType,
- AEDesc* resultingSourceData)
- OSAComponentFunctionInline(kOSASelectGetSource, 12);
- // This routine causes a compiled script to be output in a form (possibly
- // text) such that it is suitable to be passed back to OSACompile.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
- // errOSASourceNotAvailable can't get source for this scriptID
-
- ////////////////////////////////////////////////////////////////////////////////
- // OSA Optional AECoercion Interface
- ////////////////////////////////////////////////////////////////////////////////
- // Scripting components that support the AECoercion interface have the
- // kOSASupportsAECoercion bit set in it's ComponentDescription.
- ////////////////////////////////////////////////////////////////////////////////
-
- pascal OSAError
- OSACoerceFromDesc(ComponentInstance scriptingComponent,
- const AEDesc* scriptData,
- long modeFlags,
- OSAID* resultingScriptID)
- OSAComponentFunctionInline(kOSASelectCoerceFromDesc, 12);
- // This routine causes script data to be coerced into a script value.
- // If the scriptData is an AppleEvent, then the resultingScriptID is a
- // compiled script ID (mode flags for OSACompile may be used in this case).
- // Other scriptData descriptors create script value IDs.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- //
- // ModeFlags:
- // kOSAModePreventGetSource
- // kOSAModeCompileIntoContext
- // kOSAModeNeverInteract
- // kOSAModeCanInteract
- // kOSAModeAlwaysInteract
- // kOSAModeCantSwitchLayer
- // kOSAModeDontReconnect
- // kOSAModeDoRecord
-
- pascal OSAError
- OSACoerceToDesc(ComponentInstance scriptingComponent,
- OSAID scriptID,
- DescType desiredType,
- long modeFlags,
- AEDesc* result)
- OSAComponentFunctionInline(kOSASelectCoerceToDesc, 16);
- // This routine causes a script value to be coerced into any desired form.
- // If the scriptID denotes a compiled script, then it may be coerced to
- // typeAppleEvent.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
-
- ////////////////////////////////////////////////////////////////////////////////
- // OSA Optional AESending Interface
- ////////////////////////////////////////////////////////////////////////////////
- // Scripting components that support the AESending interface have the
- // kOSASupportsAESending bit set in it's ComponentDescription.
- ////////////////////////////////////////////////////////////////////////////////
-
- // Scripting systems will supply default values for these procedures if they
- // are not set by the client:
-
- typedef pascal OSErr (*AESendProcPtr)(const AppleEvent* theAppleEvent,
- AppleEvent* reply,
- AESendMode sendMode,
- AESendPriority sendPriority,
- long timeOutInTicks,
- IdleProcPtr idleProc,
- EventFilterProcPtr filterProc,
- long refCon);
-
- pascal OSAError
- OSASetSendProc(ComponentInstance scriptingComponent,
- AESendProcPtr sendProc,
- long refCon)
- OSAComponentFunctionInline(kOSASelectSetSendProc, 8);
- // If sendProc is nil, the default sendProc is used.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
-
- pascal OSAError
- OSAGetSendProc(ComponentInstance scriptingComponent,
- AESendProcPtr* sendProc,
- long* refCon)
- OSAComponentFunctionInline(kOSASelectGetSendProc, 8);
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
-
- typedef pascal OSErr (*AECreateAppleEventProcPtr)(
- AEEventClass theAEEventClass,
- AEEventID theAEEventID,
- const AEAddressDesc* target,
- short returnID,
- long transactionID,
- AppleEvent* result,
- long refCon);
-
- pascal OSAError
- OSASetCreateProc(ComponentInstance scriptingComponent,
- AECreateAppleEventProcPtr createProc,
- long refCon)
- OSAComponentFunctionInline(kOSASelectSetCreateProc, 8);
- // If createProc is nil, the default createProc is used.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
-
- pascal OSAError
- OSAGetCreateProc(ComponentInstance scriptingComponent,
- AECreateAppleEventProcPtr* createProc,
- long* refCon)
- OSAComponentFunctionInline(kOSASelectGetCreateProc, 8);
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
-
- pascal OSAError
- OSASetDefaultTarget(ComponentInstance scriptingComponent,
- const AEAddressDesc* target)
- OSAComponentFunctionInline(kOSASelectSetDefaultTarget, 4);
- // This routine sets the default target application for AE sending.
- // It also establishes the default target from which terminologies come.
- // It is effectively like having an AppleScript "tell" statement around
- // the entire program. If this routine is not called, or if the target
- // is a null AEDesc, then the current application is the default target.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
-
- ////////////////////////////////////////////////////////////////////////////////
- // OSA Optional Recording Interface
- ////////////////////////////////////////////////////////////////////////////////
- // Scripting components that support the Recording interface have the
- // kOSASupportsRecording bit set in it's ComponentDescription.
- ////////////////////////////////////////////////////////////////////////////////
-
- pascal OSAError
- OSAStartRecording(ComponentInstance scriptingComponent,
- OSAID* compiledScriptToModifyID)
- OSAComponentFunctionInline(kOSASelectStartRecording, 4);
- // Starts recording. If compiledScriptToModifyID is kOSANullScript, a
- // new script ID is created and returned. If the current application has
- // a handler for the kOSARecordedText event, then kOSARecordedText events
- // are sent to the application containing the text of each AppleEvent
- // recorded.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
- // errOSARecordingIsAlreadyOn
-
- pascal OSAError
- OSAStopRecording(ComponentInstance scriptingComponent,
- OSAID compiledScriptID)
- OSAComponentFunctionInline(kOSASelectStopRecording, 4);
- // If compiledScriptID is not being recorded into or recording is not
- // currently on, no error is returned.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
-
- ////////////////////////////////////////////////////////////////////////////////
- // OSA Optional Convenience Interface
- ////////////////////////////////////////////////////////////////////////////////
- // Scripting components that support the Convenience interface have the
- // kOSASupportsConvenience bit set in it's ComponentDescription.
- ////////////////////////////////////////////////////////////////////////////////
-
- pascal OSAError
- OSALoadExecute(ComponentInstance scriptingComponent,
- const AEDesc* scriptData,
- OSAID contextID,
- long modeFlags,
- OSAID* resultingScriptValueID)
- OSAComponentFunctionInline(kOSASelectLoadExecute, 16);
- // This routine is effectively equivalent to calling OSALoad followed by
- // OSAExecute. After execution, the compiled source is disposed. Only the
- // resulting value ID is retained.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSABadStorageType: scriptData not for this scripting component
- // errOSACorruptData: data seems to be corrupt
- // errOSADataFormatObsolete script data format is no longer supported
- // errOSADataFormatTooNew script data format is from a newer version
- // errOSAInvalidID
- // errOSAScriptError: the executing script got an error
- //
- // ModeFlags:
- // kOSAModeNeverInteract
- // kOSAModeCanInteract
- // kOSAModeAlwaysInteract
- // kOSAModeCantSwitchLayer
- // kOSAModeDontReconnect
- // kOSAModeDoRecord
-
- pascal OSAError
- OSACompileExecute(ComponentInstance scriptingComponent,
- const AEDesc* sourceData,
- OSAID contextID,
- long modeFlags,
- OSAID* resultingScriptValueID)
- OSAComponentFunctionInline(kOSASelectCompileExecute, 16);
- // This routine is effectively equivalent to calling OSACompile followed by
- // OSAExecute. After execution, the compiled source is disposed. Only the
- // resulting value ID is retained.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errAECoercionFail: sourceData is not compilable
- // errOSAScriptError: sourceData was a bad script (syntax error)
- // errOSAInvalidID: previousAndResultingCompiledScriptID was not
- // valid on input
- // errOSAScriptError: the executing script got an error
- //
- // ModeFlags:
- // kOSAModeNeverInteract
- // kOSAModeCanInteract
- // kOSAModeAlwaysInteract
- // kOSAModeCantSwitchLayer
- // kOSAModeDontReconnect
- // kOSAModeDoRecord
-
- pascal OSAError
- OSADoScript(ComponentInstance scriptingComponent,
- const AEDesc* sourceData,
- OSAID contextID,
- DescType desiredType,
- long modeFlags,
- AEDesc* resultingText)
- OSAComponentFunctionInline(kOSASelectDoScript, 20);
- // This routine is effectively equivalent to calling OSACompile followed by
- // OSAExecute and then OSADisplay. After execution, the compiled source
- // and the resulting value are is disposed. Only the resultingText
- // descriptor is retained. If a script error occur during processing, the
- // resultingText gets the error message of the error, and errOSAScriptError
- // is returned. OSAScriptError may still be used to extract more
- // information about the particular error.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errAECoercionFail: sourceData is not compilable or
- // desiredType not supported by scripting component
- // errOSAScriptError: sourceData was a bad script (syntax error)
- // errOSAInvalidID: previousAndResultingCompiledScriptID was not
- // valid on input
- // errOSAScriptError: the executing script got an error
- //
- // ModeFlags:
- // kOSAModeNeverInteract
- // kOSAModeCanInteract
- // kOSAModeAlwaysInteract
- // kOSAModeCantSwitchLayer
- // kOSAModeDontReconnect
- // kOSAModeDoRecord
- // kOSAModeDisplayForHumans
-
- ////////////////////////////////////////////////////////////////////////////////
- // OSA Optional Dialects Interface
- ////////////////////////////////////////////////////////////////////////////////
- // Scripting components that support the Dialects interface have the
- // kOSASupportsDialects bit set in it's ComponentDescription.
- ////////////////////////////////////////////////////////////////////////////////
-
- // These calls allows an scripting component that supports different dialects
- // to dynamically switch between those dialects. Although this interface is
- // specified, the particular dialect codes are scripting component dependent.
-
- pascal OSAError
- OSASetCurrentDialect(ComponentInstance scriptingComponent,
- short dialectCode)
- OSAComponentFunctionInline(kOSASelectSetCurrentDialect, 2);
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSANoSuchDialect: invalid dialectCode
-
- pascal OSAError
- OSAGetCurrentDialect(ComponentInstance scriptingComponent,
- short* resultingDialectCode)
- OSAComponentFunctionInline(kOSASelectGetCurrentDialect, 4);
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
-
- pascal OSAError
- OSAAvailableDialects(ComponentInstance scriptingComponent,
- AEDesc* resultingDialectInfoList)
- OSAComponentFunctionInline(kOSASelectAvailableDialects, 4);
- // This call return an AEList containing information about each of the
- // currently available dialects of a scripting component. Each item
- // is an AERecord of typeOSADialectInfo that contains at least the fields
- // keyOSADialectName, keyOSADialectCode, KeyOSADialectLangCode and
- // keyOSADialectScriptCode.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
-
- pascal OSAError
- OSAGetDialectInfo(ComponentInstance scriptingComponent,
- short dialectCode,
- OSType selector,
- AEDesc* resultingDialectInfo)
- OSAComponentFunctionInline(kOSASelectGetDialectInfo, 10);
- // This call gives information about the specified dialect of a scripting
- // component. It returns an AEDesc whose type depends on the selector
- // specified. Available selectors are the same as the field keys for a
- // dialect info record. The type of AEDesc returned is the same as the
- // type of the field that has same key as the selector.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSABadSelector
- // errOSANoSuchDialect: invalid dialectCode
-
- pascal OSAError
- OSAAvailableDialectCodeList(ComponentInstance scriptingComponent,
- AEDesc* resultingDialectCodeList)
- OSAComponentFunctionInline(kOSASelectAvailableDialectCodeList, 4);
- // This is alternative to OSAGetAvailableDialectCodeList. Use this call
- // and OSAGetDialectInfo to get information on dialects.
- // This call return an AEList containing dialect code for each of the
- // currently available dialects of a scripting component. Each dialect
- // code is a short integer of type typeShortInteger.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
-
- #define typeOSADialectInfo 'difo'
- // Type of a dialect info record containing at least keyOSADialectName
- // and keyOSADialectCode fields.
-
- // keys for dialect info record, also used as selectors to OSAGetDialectInfo.
-
- #define keyOSADialectName 'dnam'
- // Field of a typeOSADialectInfo record of typeChar.
- #define keyOSADialectCode 'dcod'
- // Field of a typeOSADialectInfo record of typeShortInteger.
- #define keyOSADialectLangCode 'dlcd'
- // Field of a typeOSADialectInfo record of typeShortInteger.
- #define keyOSADialectScriptCode 'dscd'
- // Field of a typeOSADialectInfo record of typeShortInteger.
-
- ////////////////////////////////////////////////////////////////////////////////
- // OSA Optional Event Handling Interface
- ////////////////////////////////////////////////////////////////////////////////
- // Scripting components that support the Event Handling interface have the
- // kOSASupportsEventHandling bit set in it's ComponentDescription.
- ////////////////////////////////////////////////////////////////////////////////
-
- typedef pascal OSErr (*AEHandlerProcPtr)(const AppleEvent* theAppleEvent,
- AppleEvent* reply,
- long refCon);
-
- pascal OSAError
- OSASetResumeDispatchProc(ComponentInstance scriptingComponent,
- AEHandlerProcPtr resumeDispatchProc,
- long refCon)
- OSAComponentFunctionInline(kOSASelectSetResumeDispatchProc, 8);
- // This function is used to set the ResumeDispatchProc that will be used
- // by OSAExecuteEvent and OSADoEvent if either no event handler can be
- // found in the context, or the context event hander "continues" control
- // onward. The two constants kOSAUseStandardDispatch and kOSANoDispatch
- // may also be passed to this routine indicating that the handler registered
- // in the application with AEInstallEventHandler should be used, or no
- // dispatch should occur, respectively.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
-
- #define kOSAUseStandardDispatch ((AEHandlerProcPtr)kAEUseStandardDispatch)
- // Special ResumeDispatchProc constant which may be passed to
- // OSASetResumeDispatchProc indicating that the handler registered
- // in the application with AEInstallEventHandler should be used.
-
- #define kOSANoDispatch ((AEHandlerProcPtr)kAENoDispatch)
- // Special ResumeDispatchProc constant which may be passed to
- // OSASetResumeDispatchProc indicating that no dispatch should occur.
-
- #define kOSADontUsePhac 0x0001
- // Special refCon constant that may be given to OSASetResumeDispatchProc
- // only when kOSAUseStandardDispatch is used as the ResumeDispatchProc.
- // This causes the standard dispatch to be performed, except the phac
- // handler is not called. This is useful during tinkerability, when
- // the phac handler is used to lookup a context associated with an event's
- // direct parameter, and call OSAExecuteEvent or OSADoEvent. Failure to
- // bypass the phac handler would result in an infinite loop.
-
- pascal OSAError
- OSAGetResumeDispatchProc(ComponentInstance scriptingComponent,
- AEHandlerProcPtr* resumeDispatchProc,
- long* refCon)
- OSAComponentFunctionInline(kOSASelectGetResumeDispatchProc, 8);
- // Returns the registered ResumeDispatchProc. If no ResumeDispatchProc has
- // been registered, then kOSAUseStandardDispatch (the default) is returned.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
-
- pascal OSAError
- OSAExecuteEvent(ComponentInstance scriptingComponent,
- const AppleEvent* theAppleEvent,
- OSAID contextID,
- long modeFlags,
- OSAID* resultingScriptValueID)
- OSAComponentFunctionInline(kOSASelectExecuteEvent, 16);
- // This call is similar to OSAExecute except the initial command to
- // execute comes in the form of an AppleEvent. If the contextID
- // defines any event handlers for that event, they are used to process
- // the event. If no event handler can be found in the context
- // errAEEventNotHandled is returned. If an event handler is found and
- // the hander "continues" control onward, the ResumeDispatchProc
- // (registered with OSASetResumeDispatchProc, above) is called given the
- // AppleEvent. The result is returned as a scriptValueID.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
- // errOSAScriptError: the executing script got an error
- // errAEEventNotHandled: no handler for event in contextID
- //
- // ModeFlags:
- // kOSAModeNeverInteract
- // kOSAModeCanInteract
- // kOSAModeAlwaysInteract
- // kOSAModeCantSwitchLayer
- // kOSAModeDontReconnect
- // kOSAModeDoRecord
-
- pascal OSAError
- OSADoEvent(ComponentInstance scriptingComponent,
- const AppleEvent* theAppleEvent,
- OSAID contextID,
- long modeFlags,
- AppleEvent* reply)
- OSAComponentFunctionInline(kOSASelectDoEvent, 16);
- // This call is similar to OSADoScript except the initial command to
- // execute comes in the form of an AppleEvent, and the result is an
- // AppleEvent reply record. If the contextID defines any event handlers
- // for that event, they are used to process the event. If no event handler
- // can be found in the context errAEEventNotHandled is returned. If an
- // event handler is found and the hander "continues" control onward, the
- // ResumeDispatchProc (registered with OSASetResumeDispatchProc, above) is
- // called given the AppleEvent. The result is returned in the form of an
- // AppleEvent reply descriptor. If at any time the script gets an error, or
- // if the ResumeDispatchProc returns a reply event indicating an error,
- // then the OSADoEvent call itself returns an error reply (i.e. OSADoEvent
- // should never return errOSAScriptError). Any error result returned by
- // the ResumeDispatchProc will be returned by OSADoEvent.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
- // errAEEventNotHandled: no handler for event in contextID
- //
- // ModeFlags:
- // kOSAModeNeverInteract
- // kOSAModeCanInteract
- // kOSAModeAlwaysInteract
- // kOSAModeCantSwitchLayer
- // kOSAModeDontReconnect
- // kOSAModeDoRecord
-
- pascal OSAError
- OSAMakeContext(ComponentInstance scriptingComponent,
- const AEDesc* contextName,
- OSAID parentContext,
- OSAID* resultingContextID)
- OSAComponentFunctionInline(kOSASelectMakeContext, 12);
- // Makes a new empty context which may be passed to OSAExecute or
- // OSAExecuteEvent. If contextName is typeNull, an unnamed context is
- // created. If parentContext is kOSANullScript then the resulting context
- // does not inherit bindings from any other context.
- //
- // Errors:
- // badComponentInstance invalid scripting component instance
- // errOSASystemError
- // errOSAInvalidID
- // errAECoercionFail: contextName is invalid
-
- ////////////////////////////////////////////////////////////////////////////////
- #ifdef __cplusplus
- }
- #endif
- // You're still here? Go home.
- #endif
- ////////////////////////////////////////////////////////////////////////////////
-